package com.leslie.hhcommunity.controller;

import com.leslie.hhcommunity.entity.DiscussPost;
import com.leslie.hhcommunity.entity.Page;
import com.leslie.hhcommunity.entity.User;
import com.leslie.hhcommunity.service.LikeService;
import com.leslie.hhcommunity.service.impl.DiscussPostServiceImpl;
import com.leslie.hhcommunity.service.impl.UserServiceImpl;
import com.leslie.hhcommunity.util.CommunityConstant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author
 * @PackageName:com.leslie.hhcommunity.controller
 * @ClassnName:HomeController
 * @Description:
 * @Date 2021/12/31  17:54
 */
@Controller
public class HomeController implements CommunityConstant {

	@Autowired
	DiscussPostServiceImpl discussService;
	@Autowired
	UserServiceImpl userService;
	@Autowired
	private LikeService likeService;

	@RequestMapping("/index")
	public String getIndexPage(Model model, Page page, @RequestParam(name = "orderMode", defaultValue = "0") int orderMode) {
		// 方法调用栈，SpringMVC会自动实例化Model和Page，并将Page注入Model
		// 所以，在thymeleaf中可以直接访问Page对象中的数据
		//总数
		page.setRows(discussService.selectDiscussPostRows(0));
		//查询的路径
		page.setPath("/index?orderMode=" + orderMode);
		List<DiscussPost> list = discussService.selectDiscussPosts(0, page.getOffset(), page.getLimit(), orderMode);
		List<Map<String, Object>> discussPosts = new ArrayList<>();
		if (list != null) {
			for (DiscussPost post : list) {
				Map<String, Object> map = new HashMap<>();
				map.put("post", post);
				User user = userService.findUserById(post.getUserId());
				map.put("user", user);
				//点赞数量
				long likeCount = likeService.findEntityLikeCount(ENTITY_TYPE_POST, post.getId());
				map.put("likeCount", likeCount);

				discussPosts.add(map);
			}
		}
		model.addAttribute("discussPosts", discussPosts);
		model.addAttribute("orderMode", orderMode);
		return "index";
	}

	@GetMapping("/error")
	public String getErrorPage() {
		return "error/500";
	}
}
